using System;
using System.Data;
using Serpis;
using Gtk;


namespace PComponentes
{
	public partial class EditWindow : Gtk.Window
	{
		public event EventHandler Saved;
		
		public EditWindow(string id, string nombre, string precio, string categoria) : base(Gtk.WindowType.Toplevel)
		{
			this.Build();
			
			string tipoQuery = "update";
			this.Title = "EDITAR '"+nombre+"'";
			if(nombre==""&&precio==""&&categoria=="")
			{
				this.Title = "INSERTAR nuevo articulo";
				tipoQuery ="insert";
			}
			
			entryId.Sensitive = false;
			entryId.Text = id;
			entryNombre.Text = nombre;
			
			if(precio.Length == 0)
			{
				precio = "0";
			}
			
			spinbuttonPrecio.Value = double.Parse(precio);
			spinbuttonPrecio.Adjustment.StepIncrement = 0.5;
			spinbuttonPrecio.SetBounds(int.MinValue, int.MaxValue, 2);
			
			my_combobox.Init(AppDbConnection.Instance.DbConnection, "SELECT * FROM categoria;");
			my_combobox.Id = categoria;
			
			botonSalir.Clicked += delegate 
			{
				this.Destroy();
			};
			
			botonGuardar.Clicked += delegate 
			{
				Console.WriteLine(spinbuttonPrecio.Value);
				//**Creamos la consulta
				string query = "UPDATE articulo SET nombre=?nombre, precio=?precio, categoria='"+my_combobox.Id+"' WHERE id='"+entryId.Text+"';";
				
				if(tipoQuery=="insert")
				{
					query = "INSERT INTO articulo (id, nombre, precio, categoria) VALUES ('"+id+"', '"+entryNombre.Text+"', ?precio, '"+my_combobox.Id+"');";
					//this.Title = "INSERTAR nuevo articulo";
				}
				
				IDbCommand dbCommand= AppDbConnection.Instance.DbConnection.CreateCommand();
				
				//**	Creamos un parametro para el campo precio
				IDbDataParameter dbDataParameter= dbCommand.CreateParameter();
				dbDataParameter.ParameterName= "precio";
				dbDataParameter.Value= spinbuttonPrecio.Value;
				dbCommand.Parameters.Add(dbDataParameter);
				
				//**	Creamos un parametro para el campo nombre
				dbDataParameter= dbCommand.CreateParameter();
				dbDataParameter.ParameterName= "nombre";
				dbDataParameter.Value= entryNombre.Text;
				dbCommand.Parameters.Add(dbDataParameter);		
				
				dbCommand.CommandText= query;
				dbCommand.ExecuteNonQuery();
				
				raiseSaved();
				this.Destroy();
			};
			
		}
		private void raiseSaved()
		{
			if(Saved != null)
			{
				Saved(this, EventArgs.Empty);
			}
		}
		public void desactivar()
		{
			Title = "Información del articulo '"+entryNombre.Text+"'";
			entryId.Sensitive = false;
			entryNombre.IsEditable = false;
			spinbuttonPrecio.IsEditable = false;
			botonGuardar.Visible = false;
		}
	}
}

